// 平台ID管理工具
import { useMainStore } from '@/store/store'
import { userAuthSession, alipayMiniAppLogin } from '@/api/auth'

/**
 * 检查并补充平台ID
 * @param {string} type - 'auto' | 'payment' | 'manual' 补充类型
 * @returns {Promise<boolean>} 是否成功获取/已存在平台ID
 */
export async function ensurePlatformId(type = 'auto') {
    const main = useMainStore()

    // #ifdef MP-WEIXIN
    return await ensureWechatOpenId(type)
    // #endif

    // #ifdef MP-ALIPAY
    return await ensureAlipayBuyerId(type)
    // #endif

    // #ifdef H5
    // H5环境通常不需要平台ID
    return true
    // #endif

    return true
}

/**
 * 确保微信OpenID存在
 */
async function ensureWechatOpenId(type) {
    const main = useMainStore()

    // 检查是否已有openid
    if (main.openid) {
        console.log('OpenID已存在:', main.openid)
        return true
    }

    try {
        if (type === 'payment') {
            // 支付时如果缺少openid，显示提示
            const result = await uni.showModal({
                title: '授权提示',
                content: '为了完成支付，需要获取微信授权信息，是否继续？',
                confirmText: '确定',
                cancelText: '取消'
            })

            if (!result.confirm) {
                return false
            }
        }

        // 获取微信授权
        const loginResult = await uni.login({ provider: 'weixin' })
        const authData = await userAuthSession({ code: loginResult.code })

        if (authData && authData.openId) {
            main.SET_OPENID(authData.openId)
            console.log('成功获取OpenID:', authData.openId)

            // 如果返回了完整的用户信息，也保存
            if (authData.userInfo && authData.accessToken) {
                main.SET_MEMBER(authData.userInfo)
                main.SET_TOKEN(authData.accessToken)
                main.SET_ACCESSES(authData.accesses || [])
            }

            return true
        }

        throw new Error('获取OpenID失败')

    } catch (error) {
        console.error('获取微信OpenID失败:', error)

        if (type === 'payment') {
            uni.showToast({
                title: '获取授权失败，请重试',
                icon: 'none'
            })
        }

        return false
    }
}

/**
 * 确保支付宝BuyerID存在
 */
async function ensureAlipayBuyerId(type) {
    const main = useMainStore()

    // 检查是否已有buyer_id
    const existingBuyerId = uni.getStorageSync('buyer_id')
    if (existingBuyerId) {
        console.log('BuyerID已存在:', existingBuyerId)
        return true
    }

    try {
        if (type === 'payment') {
            // 支付时如果缺少buyer_id，显示提示
            const result = await uni.showModal({
                title: '授权提示',
                content: '为了完成支付，需要获取支付宝授权信息，是否继续？',
                confirmText: '确定',
                cancelText: '取消'
            })

            if (!result.confirm) {
                return false
            }
        }

        // 获取支付宝授权码
        const authResult = await new Promise((resolve, reject) => {
            my.getAuthCode({
                scopes: ['auth_user'],
                success: resolve,
                fail: reject
            })
        })

        // 调用后端绑定接口
        const result = await alipayMiniAppLogin({
            code: authResult.authCode
        })

        if (result && result.buyer_id) {
            uni.setStorageSync('buyer_id', result.buyer_id)
            console.log('成功获取BuyerID:', result.buyer_id)

            // 如果返回了完整的用户信息，也保存
            if (result.userInfo && result.accessToken) {
                main.SET_MEMBER(result.userInfo)
                main.SET_TOKEN(result.accessToken)
                main.SET_ACCESSES(result.accesses || [])
            }

            return true
        }

        throw new Error('获取BuyerID失败')

    } catch (error) {
        console.error('获取支付宝BuyerID失败:', error)

        if (type === 'payment') {
            uni.showToast({
                title: '获取授权失败，请重试',
                icon: 'none'
            })
        }

        return false
    }
}

/**
 * 检查平台ID是否存在
 */
export function hasPlatformId() {
    // #ifdef MP-WEIXIN
    const main = useMainStore()
    return !!main.openid
    // #endif

    // #ifdef MP-ALIPAY
    return !!uni.getStorageSync('buyer_id')
    // #endif

    // #ifdef H5
    return true
    // #endif

    return true
}

/**
 * 获取当前平台ID
 */
export function getPlatformId() {
    // #ifdef MP-WEIXIN
    const main = useMainStore()
    return main.openid
    // #endif

    // #ifdef MP-ALIPAY
    return uni.getStorageSync('buyer_id')
    // #endif

    return null
}

/**
 * 清除平台ID（用于退出登录）
 */
export function clearPlatformId() {
    // #ifdef MP-WEIXIN
    const main = useMainStore()
    main.SET_OPENID('')
    // #endif

    // #ifdef MP-ALIPAY
    uni.removeStorageSync('buyer_id')
    // #endif
}
